﻿using System;
using System.Collections.Generic;

using System.Web;

namespace GO
{
    public class Validacao
    {
        #region ------------------------------------------[ CPF
        public bool CPF(string cpf)
        {
            int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            string[] cpfSequencia = new string[10] { "000000000", "111111111", "222222222", "333333333", "444444444", "555555555", "666666666", "777777777", "888888888", "999999999" };

            string tempCpf;
            string digito;
            int soma;
            int resto;

            cpf = cpf.Trim();
            cpf = cpf.Replace(".", "").Replace("-", "");

            // VERIFICA NUMEROS SEQUENCIAIS
            for (int i = 0; i < 9; i++)
                if (cpf.Contains(cpfSequencia[i]))
                    return false;

            if (cpf.Length != 11)
                return false;

            tempCpf = cpf.Substring(0, 9);
            soma = 0;
            for (int i = 0; i < 9; i++)
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];

            resto = soma % 11;
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;

            digito = resto.ToString();

            tempCpf = tempCpf + digito;

            soma = 0;
            for (int i = 0; i < 10; i++)
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];

            resto = soma % 11;
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;

            digito = digito + resto.ToString();

            return cpf.EndsWith(digito);
        }
        #endregion

        #region ------------------------------------------[ CNPJ
        public bool CNPJ(string cnpj)
        {
            int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int soma;
            int resto;
            string digito;
            string tempCnpj;

            cnpj = cnpj.Trim();
            cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");

            if (cnpj.Length != 14)
                return false;

            tempCnpj = cnpj.Substring(0, 12);

            soma = 0;
            for (int i = 0; i < 12; i++)
                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador1[i];

            resto = (soma % 11);
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;

            digito = resto.ToString();

            tempCnpj = tempCnpj + digito;
            soma = 0;
            for (int i = 0; i < 13; i++)
                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador2[i];

            resto = (soma % 11);
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;

            digito = digito + resto.ToString();

            return cnpj.EndsWith(digito);
        }
        #endregion

        #region ------------------------------------------[ E-MAIL
        public bool EMAIL(string email)
        {
            string caracteresInvalidos = @"/\{}[]+=#$%¨*();:?<>áéíóúâãàç´~',";
            bool retorno = false;

            // VERIFICA COMPONENTES BASICOS
            if (email.Contains("@"))
                if (email.Contains(".com") || email.Contains(".gov"))
                    if (!email.Contains(" "))
                        retorno = true;

            // VERIFICA CARACTERES INVALIDOS
            for (int i = 0; i < caracteresInvalidos.Length; i++)
            {
                string caractere = caracteresInvalidos.Substring(i, 1);
                if (email.Contains(caractere))
                    retorno = false;
            }

            return retorno;
        }
        #endregion

        #region ------------------------------------------[ RG
        public bool RG(string rg)
        {
            return true;
        }
        #endregion

        #region ------------------------------------------[ DATA
        public bool DATA(string data)
        {
            DateTime dt;
            if (DateTime.TryParse(data, out dt))
                return true;
            else
                return false;

        }
        #endregion

        #region ------------------------------------------[ CAMPO VAZIO
        public bool CampoVazio(string valor)
        {
            if (!string.IsNullOrEmpty(valor))
                return true;
            else
                return false;
        }
        #endregion

        #region ------------------------------------------[ DROP DOWN LIST SELECIONADA
        public bool DropDownSelecionada(int valor)
        {
            if (valor > 0)
                return true;
            else
                return false;
        }
        #endregion

        #region ------------------------------------------[ CARACTERES INVALIDOS
        public bool CARACTERES_INVALIDOS(string valor)
        {
            string caracteresInvalidos = @"/\{}[]+=#$%¨*();:?<>áéíóúâãàç´~', ";

            // VERIFICA CARACTERES INVALIDOS
            for (int i = 0; i < caracteresInvalidos.Length; i++)
            {
                string caractere = caracteresInvalidos.Substring(i, 1);
                if (valor.Contains(caractere))
                    return false;
            }

            return true;
        }
        #endregion
    }
}